Emit clear when a range of blocks is cleared from local storage - #849
Open
gmaclennan wants to merge 1 commit into
Open
Emit clear when a range of blocks is cleared from local storage#849gmaclennan wants to merge 1 commit into
clear when a range of blocks is cleared from local storage#849gmaclennan wants to merge 1 commit into
Conversation
append and truncate emit session events, but core.clear() emits nothing, so there is no way to observe blocks being removed from local storage (e.g. to re-announce state derived from the local bitfield) without wrapping core.clear. Emit a clear event with the cleared range after the state has been flushed, mirroring the truncate event.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
appendandtruncateemit session events, butcore.clear()emits nothing, so there is no way to observe blocks being removed from local storage. Applications that derive state from the local bitfield (e.g. announcing what they have to other peers over a side channel) need to know when that state shrinks as well as when it grows.This PR emits a
clearevent with the cleared range(start, end)after the clear has been flushed, mirroring thetruncateevent. It is emitted only from the default session state, so atomic batches and named sessions do not emit until their changes land.No behavior change; observability only.
Use case: CoMapeo peers broadcast their "haves" to each other on first connection, before replicating cores. We need to re-broadcast these haves after a clear.
(start, end)matchesclear(start, end)'s arguments. If preferred, we could followtruncate's style, which could carry a richer payload, but the range is what the one known consumer needs.